Android RN 接入
引入aar
atomCompile 'com.qunar.spider:react:1.2.0@aar'
compile 'com.qunar.3dparty:infer-annotations:1.5.0'
//这个在自己的独立模块运行需要添加,在正式打大客户端的时候需要去掉。
compile ('com.qunar.react:qunar-react-native-dependence:0.9.1'){
exclude group: 'com.facebook.fresco', module: 'imagepipeline'
exclude group: 'com.facebook.fresco', module: 'fbcore'
}
atom
{
"packageName": "com.mqunar.react",
"versionCode": "10"
}
注:如果想要在自己的独立模块运行,需要初始化rn。测试的时候,你可以直接继承ReacApplication,里面的onCreate()会初始化rn。你也可以把里面的初始化方法在自己的Application里面调用。
1.跳转到rn页面
通过发送scheme跳转到rn页面:
qunaraphone://react/open?hybridId=xxx&moduleName=xxx&qInitView=xxx&initProps=encode({})
通过代码调用打开rn页面,类QReactNative:
直接打开rn页面,第一次创建ReactContext会有默认loading.
public static void startReactActivity(Activity mActivity, String hybridid, String module, Bundle initProps)
如果不希望使用默认loading,你也可以调用接口创建ReactContext显示自己的loading. 在调用接口创建ReactContext之前显示自己的loadingng,在回调的接口里面隐藏自己的loading. 然后调用startReactActivity()打开rn页面。
public static void createReactInstanceWithCallBack(String hybridid,QReactInstanceCreateCallBack back)
2.使用ReactRootView内置到自己的Activity(不推荐)
使用ReactRootView同时Activity继承我们的QReactBaseActivity:
/**
* 创建ReactRootView
* 回调函数为js加载成功或者失败以及view渲染成功。
* 如果js加载成功,在页面渲染完成的时候,会回调onViewShow().可以在里面隐藏自己的loading。
*/
QReactNative.createRootViewUseBaseActivityWithListener(
hybridid, module, initProps, this, new QReactNative.QReactInstanceEventListener() {
@Override
public void onJsLoadingSuccess(View view) {
//ReactContext创建完成,js加载成功,返回ReactRootView.可以添加到自己的actiivty
frameLayout.addView(view);
}
@Override
public void onJsLoadingFailure() {
//js加载失败,取消loading页。重试
progressDialog.dismiss();
}
@Override
public void onViewShow() {
//页面渲染完成,取消loading
progressDialog.dismiss();
}
});
使用ReactRootView,使用QRnActivityHelper:
如果希望继承自己的Actiivty而不是我们的QReactBaseActivity。可以这样写。使用我们的QRnActivityHelper。
QReactNative.createRootViewUseHelperWithListener(hybridid, module,
initProps, this, this, qRnActivityHelper, new QReactNative.QReactInstanceEventListener() {
@Override
public void onJsLoadingSuccess(View view) {
//使用view布局
frameLayout.addView(view);
}
@Override
public void onJsLoadingFailure() {
//重试
progressDialog.dismiss();
}
@Override
public void onViewShow() {
//页面渲染完成,取消loading
progressDialog.dismiss();
}
});
3.注册自己的Module和ViewManager
我们支持业务注册自己的Module和ViewManager。在打开自己的RN页面之前调用QReactNative的方法注册进来。
public static void registerReactPackage(String hybridid, ReactPackage reactPackage)
4.Debug调试
通过发送scheme可以打开debug页面:qunaraphone://react/debug 长按大客户端的Qbug的第三个按钮会发送这个scheme进入Debug页面。 可以设置js加载方式。查看Log日志等功能。
5.Demo实例
上面说了这么多还不如来个demo来的直观。 demo地址:http://gitlab.corp.qunar.com/react_native/qunar_react_native/tree/adr_April_release/Examples/Playground/android/src/main/java/com/mqunar/react/test/androiddemo 里面的MainAdActivity有rn的各种使用方式和注释。